package com.eliaukjq.xunlianying.duoxianchengjichu;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2024/7/20 - 11:53
 */
/**
 * MyCallable 类实现了 Callable 接口，用于在新的线程中执行特定任务。
 * 该类的实例作为 FutureTask 的参数，进而被 Thread 执行。
 */
public class MyCallable implements Callable {

    /**
     * 当调用此 Callable 的 FutureTask 的 get 方法时，此方法将被调用。
     * @return 返回一个固定的整数 123，作为任务执行的结果。
     * @throws Exception 如果在执行任务过程中发生异常，则抛出。
     */
    @Override
    public Object call() throws Exception {
        return 123;
    }

    /**
     * 程序的入口点。
     * 在这里，创建了一个 MyCallable 实例，并通过 FutureTask 封装了这个 Callable。
     * 随后，FutureTask 被传递给一个新的 Thread，并启动该线程。
     * 最后，通过 FutureTask 的 get 方法等待并获取线程执行的结果。
     * @param args 命令行参数，本程序中未使用。
     * @throws ExecutionException 如果在获取结果时，底层计算抛出了异常，则包装后的异常被抛出。
     * @throws InterruptedException 如果当前线程在等待结果时被中断，则抛出此异常。
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable myCallable = new MyCallable();
        FutureTask futureTask = new FutureTask<>(myCallable);
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get());
    }
}

